
import {httpGet, httpDel} from '@/api';

export const IndexListMixin = {
  data(){
    return {
      // 遮罩层
      loading: false,
      // 选中数组
      selectedRowKeys: [],
      selectedRows: [],
      // 显示搜索条件
      showSearch: true,
      // 列表数据
      dataList: [],
      // 总条数
      total: 0,
      //行唯一字段
      rowKey: 'id',
      // 查询参数, 由具体组件覆盖
      queryParams: {},
      //查询表单组件ref
      queryFormRef: 'queryForm',
      //表格组件ref
      dataTableRef: 'dataTable',
      //是否使用排序
      useOrder: true,
      //默认排序字段
      defaultOrderBy:'id',
      defaultOrderDirec:'descending',
    }
  },
  created() {
    this.resetSort();
  },
  computed: {
    // 非单个禁用
    single(){
      return !this.selectedRowKeys || this.selectedRowKeys.length != 1;
    },
    // 非多个禁用
    multiple(){
      return !this.selectedRowKeys || !this.selectedRowKeys.length;
    },
    defaultSort(){
      return {prop: this.defaultOrderBy, order: this.defaultOrderDirec};
    }
  },
  methods:{

    getList(){
      //具体组件自己定义同名的数据查询方法来覆盖此方法
    },

    //加载列表数据
    loadData(param0, params, callback) {
      this.loading = true;
      params = params ? params : this.queryParams;
      let promse = param0 instanceof Function ? param0(params) : httpGet(param0, params);
      promse.then(res => {
        if(res.success && res.data){
          this.dataList = res.data.records;
          this.total = res.data.total ? res.data.total : 0;
        }
      }).finally((res)=>{
      	this.loading = false;
        if(callback && callback instanceof Function){
          callback(res);
        }
      });
    },

    /** 重置排序 */
    resetSort(){
      if(this.dataTableRef && this.$refs[this.dataTableRef] && this.$refs[this.dataTableRef].clearSort){
        this.$refs[this.dataTableRef].clearSort();
      }
      if(this.useOrder){
        Object.assign(this.queryParams, {orderBy: this.defaultOrderBy, orderDirec: this.defaultOrderDirec});
      }
    },

    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.selectedRows = [];
      this.selectedRowKeys = [];
      this.onClearSelected();
      this.getList();
    },

    /** 重置按钮操作 */
    resetQuery() {
      if(this.queryFormRef && this.$refs[this.queryFormRef]){
        this.$refs[this.queryFormRef].resetFields();
      }
      this.resetSort();
      this.handleQuery();
    },

    // 多选框选中数据
    onSelectChange(selection) {
      this.selectedRows = selection
      this.selectedRowKeys = selection.map(item => item[this.rowKey]);
    },

    onClearSelected() {
      if(this.dataTableRef && this.$refs[this.dataTableRef]){
        this.$refs[this.dataTableRef].clearSelection();
      }
    },

    // 列排序事件处理
    onSortChange(sortData) {
      //{ column, prop, order }
      Object.assign(this.queryParams, {orderBy: sortData.prop, orderDirec: sortData.order});
      this.getList();
    },

    /** 删除按钮操作 */
    deleteData(param0, params, callback) {
      params = params ? params : this.selectedRowKeys ;
      this.$confirm('确认删除所选数据?', "操作确认", {type: "warning"}).then(()=>{
        //param0是函数表示删除函数，否则表示删除的请求地址
        return param0 instanceof Function ? param0(params) : httpDel(param0 + (Array.isArray(params) ? params.join() : params));
      }).then(() => {
        if(callback && callback instanceof Function){
          callback();
        }else{
          this.getList();
          this.msgSuccess("删除成功");
        }
      }).catch(function() {});
    },

    /** 导出按钮操作 */
    exportData(title, param0, params) {
      this.$confirm("确认导出数据?", "确认", {type: "warning"}).then(() => {
        params = params ? params : this.queryParams ;
        this.$refs.exportDialog.show(title, param0, params)
      });
    }

  }
}
